package com.dp.proxy.dynamicJDK;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @Author: dupeng
 * @CreateTime: 2025-01-07  10:31
 * @Description: TODO
 */
public class Main {

    public static void main(String[] args) {
        // 实例化被代理对象
        Person targetInstance = new ZhangSan();

        // 获取被代理对象的类加载器，用作生成代理对象的必要参数
        ClassLoader classLoader = targetInstance.getClass().getClassLoader();

        // 获取被代理对象的实现接口，用作生成代理对象的必要参数
        // 方法映射就是基于这个参数实现的
        Class<?>[] interfaces = targetInstance.getClass().getInterfaces();

        // 获取被代理对象的增强主题类，用作生成代理对象的必要参数
        PersonProxy personProxy = new PersonProxy(targetInstance);

        //创建代理对象
        Person proxyInstance = (Person) Proxy.newProxyInstance(classLoader, interfaces, personProxy);

        //使用代理对象执行方法
        proxyInstance.getName();
    }

}
